package org.dxy.domain.model.aggregate;

import org.dxy.domain.command.material.*;
import org.dxy.domain.model.aggregate.impl.MaterialAggRoot;

/**
 * 物料聚合根接口
 * @author dxy
 * @createTime 2025/9/7
 */
public interface Material extends AggregateRoot {

    /**
     * 更新物料基本信息
     */
    void update(UpdateMaterialCommand command);

    /**
     * 更新物料规格
     */
    void updateSpecification(UpdateMaterialSpecificationCommand command);

    /**
     * 更新物料计量单位
     */
    void updateUnit(UpdateMaterialUnitCommand command);

    /**
     * 更新物料成本
     */
    void updateCost(UpdateMaterialCostCommand command);

    /**
     * 启用物料
     */
    void enable(EnableMaterialCommand command);

    /**
     * 禁用物料
     */
    void disable(DisableMaterialCommand command);

    /**
     * 删除物料
     */
    void delete(DeleteMaterialCommand command);

    /**
     * 创建物料
     */
    static Material create(Long materialId, CreateMaterialCommand command) {
        return MaterialAggRoot.create(materialId, command);
    }
}